#ifndef LAYOUT_H_
#define LAYOUT_H_

#include "graphics/surface.h"

// DEFAULT VALUES //
#define DEFAULT_BATTLE_BG_X				0
#define DEFAULT_BATTLE_BG_Y				0
#define DEFAULT_BATTLE_REGION_X			0
#define DEFAULT_BATTLE_REGION_Y			0
#define DEFAULT_BATTLE_REGION_WIDTH		1024
#define DEFAULT_BATTLE_REGION_HEIGHT	100
#define DEFAULT_PUZZLE_BG_X				200
#define DEFAULT_PUZZLE_BG_Y				100
#define DEFAULT_PUZZLE_REGION_X			210
#define DEFAULT_PUZZLE_REGION_Y			110
#define DEFAULT_PUZZLE_REGION_WIDTH		400
#define DEFAULT_PUZZLE_REGION_HEIGHT	650
#define DEFAULT_PLAYER_BG_X				0
#define DEFAULT_PLAYER_BG_Y				100
#define DEFAULT_PLAYER_REGION_X			0
#define DEFAULT_PLAYER_REGION_Y			100
#define DEFAULT_PLAYER_REGION_WIDTH		200
#define DEFAULT_PLAYER_REGION_HEIGHT	50
#define DEFAULT_HAND_BG_X				0
#define DEFAULT_HAND_BG_Y				100
#define DEFAULT_HAND_REGION_X			0
#define DEFAULT_HAND_REGION_Y			150
#define DEFAULT_HAND_REGION_WIDTH		200
#define DEFAULT_HAND_REGION_HEIGHT		618
#define DEFAULT_QUEUE_BG_X				620
#define DEFAULT_QUEUE_BG_Y				100
#define DEFAULT_QUEUE_REGION_X			630
#define DEFAULT_QUEUE_REGION_Y			105
#define DEFAULT_QUEUE_REGION_WIDTH		90
#define DEFAULT_QUEUE_REGION_HEIGHT		250
#define DEFAULT_ALIGNMENT_BG_X			720
#define DEFAULT_ALIGNMENT_BG_Y			100
#define DEFAULT_ALIGNMENT_REGION_X		725
#define DEFAULT_ALIGNMENT_REGION_Y		105
#define DEFAULT_ALIGNMENT_REGION_WIDTH	160
#define DEFAULT_ALIGNMENT_REGION_HEIGHT	160
////////////////////

/**
* Stores the preference for the layout.
* 
* @author dfoelber
**/
class Layout
{
public:
	/**
	* Constructor
	**/
	Layout();
	
	/**
	* Deconstructor
	**/
	~Layout();
	
	/**
	* Creates the background with the current layout preferences.
	* Caller is responsible for releasing the created surface.
	*  
	* @return The background
	**/
	Surface* CreateBackground();
	
	/**
	* Return's the current puzzle region's area.
	* 
	* @return Puzzle region's area
	**/
	SDL_Rect GetPuzzleRegionArea();
	
	/**
	* Return's the current player region's area.
	* 
	* @return Player region's area
	**/
	SDL_Rect GetPlayerRegionArea();
	
	/**
	* Return's the current hand region's area.
	* 
	* @return Hand region's area
	**/
	SDL_Rect GetHandRegionArea();
	
	/**
	* Return's the current queue region's area.
	* 
	* @return Queue region's area
	**/
	SDL_Rect GetQueueRegionArea();
	
	/**
	* Return's the current alignment region's area.
	* 
	* @return Alignment region's area
	**/
	SDL_Rect GetAlignmentRegionArea();
	
	/**
	* Return's the current battle region's area.
	* 
	* @return Battle region's area
	**/
	SDL_Rect GetBattleRegionArea();
	
private:
	/// Puzzle region's background coordinate
	int				puzzleBgX;
	int				puzzleBgY;
	/// Puzzle region's area
	SDL_Rect		puzzleArea;
	/// Player region's background coordinate
	int				playerBgX;
	int				playerBgY;
	/// Player region's area
	SDL_Rect		playerArea;
	/// Hand region's background coordinate
	int				handBgX;
	int				handBgY;
	/// Hand region's area
	SDL_Rect		handArea;
	/// Queue region's background coordinate
	int				queueBgX;
	int				queueBgY;
	/// Queue region's area
	SDL_Rect		queueArea;
	/// Alignment region's background coordinate
	int				alignmentBgX;
	int				alignmentBgY;
	/// Alignment region's area
	SDL_Rect		alignmentArea;
	/// Battle region's background coordinate
	int				battleBgX;
	int				battleBgY;
	/// Battle region's area
	SDL_Rect		battleArea;
};

#endif /*LAYOUT_H_*/
